//package com.sc.nft.dao;
//
//import cn.hutool.core.collection.CollUtil;
//import cn.hutool.core.date.DateTime;
//import cn.hutool.core.util.StrUtil;
//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
//import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
//import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
//import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
//import com.sc.nft.annotation.PartitionField;
//import com.sc.nft.annotation.PartitionPK;
//import com.sc.nft.annotation.PartitionTable;
//import com.sc.nft.entity.CollectionChainInitDetailsLog;
//import com.sc.nft.entity.vo.TmpCollectionVO;
//import com.sc.nft.enums.CollectionChainDealStatusEnum;
//import com.sc.nft.enums.UserChainLogStatusEnum;
//import com.sc.nft.helper.ElasticsearchHelper;
//import com.sc.nft.helper.TableIdGenerator;
//import com.sc.nft.helper.TablePartitionExecutor;
//import com.sc.nft.mapper.CollectionChainInitDetailsLogMapper;
//import lombok.extern.slf4j.Slf4j;
//import org.elasticsearch.action.search.SearchRequest;
//import org.elasticsearch.action.search.SearchResponse;
//import org.elasticsearch.index.query.QueryBuilders;
//import org.elasticsearch.search.SearchHit;
//import org.elasticsearch.search.builder.SearchSourceBuilder;
//import org.elasticsearch.search.sort.SortOrder;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.lang.NonNull;
//import org.springframework.util.CollectionUtils;
//
//import java.io.IOException;
//import java.util.ArrayList;
//import java.util.Arrays;
//import java.util.List;
//import java.util.Objects;
//import java.util.concurrent.atomic.AtomicBoolean;
//import java.util.stream.Collectors;
//
//import static com.sc.nft.constant.TableNameConstants.COLLECTION_CHAIN_INIT_DETAILS_LOG;
//
///**
// * 藏品初始化上链记录详情表(sc_collection_chain_init_details_log)数据DAO | 分区表实现
// *
// * @author Sun
// * @description 由 Mybatisplus Code Generator 创建
// * @since 2023-04-18 14:28:42
// */
//@Slf4j
//public class CollectionChainInitDetailsLogDaoPartition
//        extends ServiceImpl<CollectionChainInitDetailsLogMapper, CollectionChainInitDetailsLog>
//        implements CollectionChainInitDetailsLogDao {
//
//    @Autowired
//    private TableIdGenerator tableIdGenerator;
//
//    @Autowired
//    private ElasticsearchHelper elasticsearchHelper;
//
//    private static final String TABLE = COLLECTION_CHAIN_INIT_DETAILS_LOG;
//
//    // 索引与表 sc_collection_chain_init_details_log 一一映射
//    final String indexAlias = "meta-collection_chain_init_details_log-alias";
//
//    @Override
//    public void insertBatch(List<CollectionChainInitDetailsLog> list) {
////        baseMapper.insetBatch(list);
//
//        // 分区插入
//        if (CollectionUtils.isEmpty(list)) {
//            return;
//        }
//
//        // 按 collectionId 分组插入
//        list.stream()
//                .filter(item -> item != null && item.getCollectionId() != null)
//                .collect(Collectors.groupingBy(CollectionChainInitDetailsLog::getCollectionId))
//                .forEach((collectionId, items) -> {
//                    TablePartitionExecutor.exec(CollectionChainInitDetailsLogDao.getPartitionByCollectionId(collectionId), (partition) -> {
//                        // 生成并填充ID列表
//                        tableIdGenerator.fillAutoIncrementIds(partition, items, this::nextIds, CollectionChainInitDetailsLog::setId);
//                        // 批量插入
//                        baseMapper.insetBatch(items);
//                    });
//                });
//    }
//
//    private List<Long> nextIds(String partition, int count) {
//        // 注：这里的 $item 必须使用分片索引，不能直接使用 $merchantsId，否则会造成主键冲突，原因是主键前缀是使用分片索引表示的，
//        // 而自增主键表中如果使用 $merchantsId 作区分就会导致相同分区的主键出现冲突
//        return tableIdGenerator.defaultNextIds(TABLE, partition, count);
//    }
//
//    /**
//     * 该方法查询的不是 sc_collection_chain_init_details_log 表，不涉及分区问题
//     */
//    @Override
//    public List<TmpCollectionVO> getTmpData() {
//        return baseMapper.getTmpData();
//    }
//
//    @Override
//    @PartitionTable(TABLE)
//    public List<CollectionChainInitDetailsLog> getListByStatusAndDealStatusAndCollectionId(@PartitionField Long collectionId, UserChainLogStatusEnum userChainLogStatusEnum, CollectionChainDealStatusEnum collectionChainDealStatusEnum) {
//        LambdaQueryWrapper<CollectionChainInitDetailsLog> wrapper = new LambdaQueryWrapper<>();
//        wrapper.eq(CollectionChainInitDetailsLog::getCollectionId, collectionId);
//        wrapper.eq(CollectionChainInitDetailsLog::getStatus, userChainLogStatusEnum);
//        wrapper.eq(CollectionChainInitDetailsLog::getDealStatus, collectionChainDealStatusEnum);
//        wrapper.last("limit 150");
//        return list(wrapper);
//    }
//
//    @Override
//    @PartitionTable(TABLE)
//    public List<Long> getWithTransferQueue(@PartitionField Long collectionId) {
//        LambdaQueryWrapper<CollectionChainInitDetailsLog> wrapper = new LambdaQueryWrapper<>();
//        wrapper.select(CollectionChainInitDetailsLog::getId);
//        wrapper.eq(CollectionChainInitDetailsLog::getCollectionId, collectionId);
//        wrapper.eq(CollectionChainInitDetailsLog::getStatus, UserChainLogStatusEnum.SUCCESS);
//        wrapper.eq(CollectionChainInitDetailsLog::getDealStatus, CollectionChainDealStatusEnum.TRADEABLE);
//        wrapper.last("order by rand() limit 3000");
//        return listObjs(wrapper, x -> (Long) x);
//    }
//
//    /**
//     * 获取待上链藏品ID
//     *
//     * @param status     非空
//     * @param dealStatus 非空
//     * @return 藏品ID
//     */
//    @Override
//    public Long getOneTypeIds(UserChainLogStatusEnum status, CollectionChainDealStatusEnum dealStatus) {
//        SearchSourceBuilder source = new SearchSourceBuilder()
//                .query(QueryBuilders.boolQuery()
//                        .filter(QueryBuilders.termQuery("status", status))
//                        .filter(QueryBuilders.termQuery("dealStatus", dealStatus))
//                        .filter(QueryBuilders.termQuery("isDelete", false))
//                )
//                .size(1)
//                .fetchSource(new String[]{"collectionId"}, null);
//
//        try {
//            SearchRequest request = new SearchRequest(indexAlias).source(source);
//            SearchResponse response = elasticsearchHelper.search(request);
//
//            return Arrays.stream(response.getHits().getHits())
//                    .findFirst()
//                    .map(SearchHit::getSourceAsMap)
//                    .map(m -> (Number) m.get("collectionId"))   // 这里从Map中取出的实际是Integer类型
//                    .map(Number::longValue)
//                    .orElse(null);
//        } catch (IOException e) {
//            log.error("ES搜索出错 #getOneTypeIds()", e);
//            return null;
//        }
//
////        return baseMapper.getOneTypeIds(status.getCode(),dealStatus.getCode());
//    }
//
//    @Override
//    public CollectionChainInitDetailsLog getOneByUuid(String collectionUuid) {
//
//        SearchSourceBuilder source = new SearchSourceBuilder()
//                .query(QueryBuilders.boolQuery()
//                        .filter(QueryBuilders.termQuery("collectionUuid", collectionUuid))
//                        .filter(QueryBuilders.termQuery("isDelete", false))
//                )
//                .sort("id", SortOrder.ASC)
//                .size(1);
//
//        try {
//            SearchRequest request = new SearchRequest(indexAlias).source(source);
//            return CollUtil.getFirst(elasticsearchHelper.search(request, CollectionChainInitDetailsLog.class));
//        } catch (IOException e) {
//            log.error("ES搜索出错 #getOneByUuid()", e);
//            return null;
//        }
//
////        LambdaQueryWrapper<CollectionChainInitDetailsLog> wrapper = new LambdaQueryWrapper<>();
////        wrapper.eq(CollectionChainInitDetailsLog::getCollectionUuid, collectionUuid);
////        wrapper.last("order by id limit 1");
////        return getOne(wrapper);
//    }
//
//    @Override
//    @PartitionTable(TABLE)
//    public Boolean updateChainInfoById(@PartitionPK Long id, Long tokenId, String transactionHash, String contractAddress, String deployTransactionHash) {
//        UpdateWrapper<CollectionChainInitDetailsLog> wrapper = new UpdateWrapper<>();
//        wrapper.eq("id", id);
//        wrapper.set("token_id", tokenId);
//        wrapper.set("transaction_hash", transactionHash);
//        wrapper.set("contract_address", contractAddress);
//        wrapper.set("deploy_transaction_hash", deployTransactionHash);
//        wrapper.set("deal_status", CollectionChainDealStatusEnum.TRADEABLE.getCode());
//        wrapper.set("status", UserChainLogStatusEnum.SUCCESS.getCode());
//        if (tokenId.intValue() != -1) {
//            wrapper.set("numbering", tokenId.intValue() + 1);
//        }
//        return update(wrapper);
//    }
//
//    @Override
//    @PartitionTable(TABLE)
//    public Integer getCountByStatusAndChainStatusAndCollectionId(UserChainLogStatusEnum status, CollectionChainDealStatusEnum dealStatus, @PartitionField Long collectionId) {
//        LambdaQueryWrapper<CollectionChainInitDetailsLog> wrapper = new LambdaQueryWrapper<>();
//        wrapper.eq(CollectionChainInitDetailsLog::getCollectionId, collectionId);
//        wrapper.eq(CollectionChainInitDetailsLog::getStatus, status);
//        wrapper.eq(CollectionChainInitDetailsLog::getDealStatus, dealStatus);
//        wrapper.gt(CollectionChainInitDetailsLog::getTokenId, 0);
//        return count(wrapper);
//    }
//
//    @Override
//    @PartitionTable(TABLE)
//    public CollectionChainInitDetailsLog getOneByStatusAndDealStatusAndCollectionId(UserChainLogStatusEnum userChainLogStatusEnum,
//                                                                                    CollectionChainDealStatusEnum collectionChainDealStatusEnum,
//                                                                                    @PartitionField Long collectionId) {
//        LambdaQueryWrapper<CollectionChainInitDetailsLog> wrapper = new LambdaQueryWrapper<>();
//        wrapper.eq(CollectionChainInitDetailsLog::getCollectionId, collectionId);
//        wrapper.eq(CollectionChainInitDetailsLog::getStatus, userChainLogStatusEnum);
//        wrapper.eq(CollectionChainInitDetailsLog::getDealStatus, collectionChainDealStatusEnum);
//        wrapper.gt(CollectionChainInitDetailsLog::getTokenId, -1);
//        wrapper.last("ORDER BY RAND()  LIMIT 1");
//        return getOne(wrapper);
//    }
//
//    @Override
//    public List<CollectionChainInitDetailsLog> getOneTypeListByStatusAndDealStatusAndTokenId(UserChainLogStatusEnum status, CollectionChainDealStatusEnum dealStatus) {
//
//        SearchSourceBuilder source = new SearchSourceBuilder()
//                .query(QueryBuilders.boolQuery()
//                        .filter(QueryBuilders.termQuery("tokenId", -1L))
//                        .filter(QueryBuilders.termQuery("status", status))
//                        .filter(QueryBuilders.termQuery("dealStatus", dealStatus))
//                        .filter(QueryBuilders.termQuery("isDelete", false))
//                );
//
//        try {
//            return elasticsearchHelper.searchAfter(indexAlias, source, CollectionChainInitDetailsLog.class);
//        } catch (IOException e) {
//            log.error("ES搜索出错 #getOneTypeListByStatusAndDealStatusAndTokenId()", e);
//            return null;
//        }
//
////        LambdaQueryWrapper<CollectionChainInitDetailsLog> wrapper = new LambdaQueryWrapper<>();
////        wrapper.eq(CollectionChainInitDetailsLog::getTokenId, -1L);
////        wrapper.eq(CollectionChainInitDetailsLog::getStatus, status);
////        wrapper.eq(CollectionChainInitDetailsLog::getDealStatus, dealStatus);
////        return list(wrapper);
//    }
//
//    @Override
//    @PartitionTable(value = TABLE)
//    public CollectionChainInitDetailsLog getOneByIdAndDealStatus(@PartitionPK Long collectionChainId, CollectionChainDealStatusEnum dealStatus) {
//        LambdaQueryWrapper<CollectionChainInitDetailsLog> wrapper = new LambdaQueryWrapper<>();
//        wrapper.eq(CollectionChainInitDetailsLog::getId, collectionChainId);
//        wrapper.eq(CollectionChainInitDetailsLog::getDealStatus, dealStatus);
//        return getOne(wrapper);
//    }
//
//    @Override
//    @PartitionTable(TABLE)
//    public List<CollectionChainInitDetailsLog> getListByDealStatusAndCollectionIdAndStatus(UserChainLogStatusEnum status,
//                                                                                           CollectionChainDealStatusEnum dealStatus,
//                                                                                           @PartitionField Long collectionId) {
//        LambdaQueryWrapper<CollectionChainInitDetailsLog> wrapper = new LambdaQueryWrapper<>();
//        wrapper.eq(CollectionChainInitDetailsLog::getCollectionId, collectionId);
//        wrapper.eq(CollectionChainInitDetailsLog::getStatus, status);
//        wrapper.eq(CollectionChainInitDetailsLog::getDealStatus, dealStatus);
//        wrapper.gt(CollectionChainInitDetailsLog::getTokenId, -1);
//        return list(wrapper);
//    }
//
//    @Override
//    public Boolean updateContractAddressAndTransactionHashAndStatusAndDealStatusByIds(String contractAddress, String transactionHash, UserChainLogStatusEnum status, CollectionChainDealStatusEnum dealStatus, List<Long> ids) {
////        LambdaUpdateWrapper<CollectionChainInitDetailsLog> wrapper = new LambdaUpdateWrapper<>();
////        wrapper.in(CollectionChainInitDetailsLog::getId, ids);
////        wrapper.set(CollectionChainInitDetailsLog::getContractAddress, contractAddress);
////        wrapper.set(CollectionChainInitDetailsLog::getTransactionHash, transactionHash);
////        wrapper.set(CollectionChainInitDetailsLog::getStatus, status);
////        wrapper.set(CollectionChainInitDetailsLog::getDealStatus, dealStatus);
////        return update(wrapper);
//
//        // 根据ids分区处理
//        if (CollectionUtils.isEmpty(ids)) {
//            return false;
//        }
//
//        final AtomicBoolean fail = new AtomicBoolean(false);
//        ids.stream()
//                .filter(Objects::nonNull)
//                .collect(Collectors.groupingBy(CollectionChainInitDetailsLogDao::getPartitionById))
//                .forEach((partition, subIds) -> {
//                    // 分片执行
//                    TablePartitionExecutor.exec(partition, () -> {
//                        LambdaUpdateWrapper<CollectionChainInitDetailsLog> wrapper = new LambdaUpdateWrapper<>();
//                        wrapper.in(CollectionChainInitDetailsLog::getId, subIds);
//                        wrapper.set(CollectionChainInitDetailsLog::getContractAddress, contractAddress);
//                        wrapper.set(CollectionChainInitDetailsLog::getTransactionHash, transactionHash);
//                        wrapper.set(CollectionChainInitDetailsLog::getStatus, status);
//                        wrapper.set(CollectionChainInitDetailsLog::getDealStatus, dealStatus);
//                        if (!update(wrapper)) {
//                            fail.set(true);
//                        }
//                    });
//                });
//
//        return !fail.get();
//    }
//
//    @Override
//    public CollectionChainInitDetailsLog getOneByTransactionHash(String transactionHash) {
//
//        SearchSourceBuilder source = new SearchSourceBuilder()
//                .query(QueryBuilders.boolQuery()
//                        .filter(QueryBuilders.termQuery("transactionHash", transactionHash))
//                        .filter(QueryBuilders.termQuery("status", UserChainLogStatusEnum.IN_CHINA))
//                        .filter(QueryBuilders.termQuery("dealStatus", CollectionChainDealStatusEnum.IN_CHINA))
//                        .filter(QueryBuilders.termQuery("tokenId", 0))
//                        .filter(QueryBuilders.termQuery("isDelete", false))
//                )
//                .size(1);
//
//        try {
//            SearchRequest request = new SearchRequest(indexAlias).source(source);
//            return CollUtil.getFirst(elasticsearchHelper.search(request, CollectionChainInitDetailsLog.class));
//        } catch (IOException e) {
//            log.error("ES搜索出错 #getOneByTransactionHash()", e);
//            return null;
//        }
//
////        LambdaQueryWrapper<CollectionChainInitDetailsLog> wrapper = new LambdaQueryWrapper<>();
////        wrapper.eq(CollectionChainInitDetailsLog::getTransactionHash, transactionHash);
////        wrapper.eq(CollectionChainInitDetailsLog::getStatus, UserChainLogStatusEnum.IN_CHINA);
////        wrapper.eq(CollectionChainInitDetailsLog::getDealStatus, CollectionChainDealStatusEnum.IN_CHINA);
////        wrapper.eq(CollectionChainInitDetailsLog::getTokenId, 0);
////        wrapper.last("limit 1");
////        return getOne(wrapper);
//    }
//
//    @Override
//    @PartitionTable(TABLE)
//    public Boolean updateTokenIdAndNumberingById(@PartitionPK Long id, Integer tokenId) {
//        LambdaUpdateWrapper<CollectionChainInitDetailsLog> wrapper = new LambdaUpdateWrapper<>();
//        wrapper.eq(CollectionChainInitDetailsLog::getId, id);
//        wrapper.set(CollectionChainInitDetailsLog::getTokenId, tokenId);
//        wrapper.set(CollectionChainInitDetailsLog::getNumbering, tokenId);
//        wrapper.set(CollectionChainInitDetailsLog::getDealStatus, CollectionChainDealStatusEnum.TRADEABLE);
//        wrapper.set(CollectionChainInitDetailsLog::getStatus, UserChainLogStatusEnum.SUCCESS);
//        return update(wrapper);
//    }
//
//    @Override
//    @PartitionTable(TABLE)
//    public Boolean updateContractAddressAndTransactionHashAndStatusAndDealStatusById(String contractAddress,
//                                                                                     String transactionHash,
//                                                                                     UserChainLogStatusEnum status,
//                                                                                     CollectionChainDealStatusEnum dealStatus,
//                                                                                     @PartitionPK Long id) {
//        LambdaUpdateWrapper<CollectionChainInitDetailsLog> wrapper = new LambdaUpdateWrapper<>();
//        wrapper.eq(CollectionChainInitDetailsLog::getId, id);
//        wrapper.set(CollectionChainInitDetailsLog::getContractAddress, contractAddress);
//        wrapper.set(CollectionChainInitDetailsLog::getTransactionHash, transactionHash);
//        wrapper.set(CollectionChainInitDetailsLog::getStatus, status);
//        wrapper.set(CollectionChainInitDetailsLog::getDealStatus, dealStatus);
//        return update(wrapper);
//    }
//
//    @Override
//    @PartitionTable(TABLE)
//    public CollectionChainInitDetailsLog getOneByCollectionIdAndUuid(@PartitionField Long collectionId, String collectionUuid) {
//        LambdaQueryWrapper<CollectionChainInitDetailsLog> wrapper = new LambdaQueryWrapper<>();
//        wrapper.eq(CollectionChainInitDetailsLog::getCollectionId, collectionId);
//        wrapper.eq(CollectionChainInitDetailsLog::getCollectionUuid, collectionUuid);
//        return getOne(wrapper);
//    }
//
//    /**
//     * 该方法应指定分页参数，否则容易出现慢查询
//     */
//    @Override
//    @PartitionTable(TABLE)
//    public List<CollectionChainInitDetailsLog> getListByCollectionId(@PartitionField Long collectionId) {
////        LambdaQueryWrapper<CollectionChainInitDetailsLog> wrapper = new LambdaQueryWrapper<>();
////        wrapper.eq(CollectionChainInitDetailsLog::getCollectionId, collectionId);
////        return list(wrapper);
//
//        // 查询指定 collectionId 下的所有数据，可能出现一次查出数据过多的问题，这里在不改变原有接口语义的条件下，将之修改为分批查询
//        final List<CollectionChainInitDetailsLog> container = new ArrayList<>();
//
//        // 这里用 for 循环代替 while 循环，限制查询的总量，单次查询无论如何也不应该超过 1_000_000 条记录
//        for (int pageNo = 1, pageSize = 1000; pageNo <= 1000; pageNo++) {
//
//            // 返回NULL或者条数不足一页表示已查出全部数据
//            List<CollectionChainInitDetailsLog> items = getListByCollectionId(collectionId, pageNo, pageSize);
//
//            if (items == null) {
//                break;
//            }
//
//            container.addAll(items);
//
//            if (items.size() < pageSize) {
//                break;
//            }
//
//        }
//
//        return container;
//    }
//
//    private List<CollectionChainInitDetailsLog> getListByCollectionId(Long collectionId, int pageNo, int pageSize) {
//        LambdaQueryWrapper<CollectionChainInitDetailsLog> wrapper = new LambdaQueryWrapper<>();
//        wrapper.eq(CollectionChainInitDetailsLog::getCollectionId, collectionId);
//        return page(new Page<>(pageNo, pageSize, false), wrapper).getRecords();
//    }
//
//    @Override
//    @PartitionTable(TABLE)
//    public List<CollectionChainInitDetailsLog> getPageListByCollectionIdAndPage(@PartitionField Long collectionId, int pageNo, int pageSize) {
//        LambdaQueryWrapper<CollectionChainInitDetailsLog> wrapper = new LambdaQueryWrapper<>();
//        wrapper.eq(CollectionChainInitDetailsLog::getCollectionId, collectionId);
//        wrapper.last("limit " + StrUtil.format("{},{}", pageNo, pageSize));
//        return list(wrapper);
//    }
//
//    @Override
//    public List<CollectionChainInitDetailsLog> getListByTransactionHash(String transactionHash) {
//
//        SearchSourceBuilder source = new SearchSourceBuilder()
//                .query(QueryBuilders.boolQuery()
//                        .filter(QueryBuilders.termQuery("transactionHash", transactionHash))
//                        .filter(QueryBuilders.termQuery("isDelete", false))
//                );
//
//        try {
//            return elasticsearchHelper.searchAfter(indexAlias, source, CollectionChainInitDetailsLog.class);
//        } catch (IOException e) {
//            log.error("ES搜索出错 #getListByTransactionHash()", e);
//            return null;
//        }
//
////        LambdaQueryWrapper<CollectionChainInitDetailsLog> wrapper = new LambdaQueryWrapper<>();
////        wrapper.eq(CollectionChainInitDetailsLog::getTransactionHash, transactionHash);
////        return list(wrapper);
//    }
//
//    @Override
//    @PartitionTable(TABLE)
//    public CollectionChainInitDetailsLog getOneByTokenIdAndCollectionId(Integer numbering, @PartitionField Long collectionId) {
//        LambdaQueryWrapper<CollectionChainInitDetailsLog> wrapper = new LambdaQueryWrapper<>();
//        wrapper.eq(CollectionChainInitDetailsLog::getTokenId, numbering);
//        wrapper.eq(CollectionChainInitDetailsLog::getCollectionId, collectionId);
//        wrapper.eq(CollectionChainInitDetailsLog::getStatus, UserChainLogStatusEnum.SUCCESS);
//        wrapper.eq(CollectionChainInitDetailsLog::getDealStatus, CollectionChainDealStatusEnum.TRADEABLE);
//        return getOne(wrapper);
//    }
//
//    @Override
//    @PartitionTable(TABLE)
//    public Boolean updateDealStatusById(@PartitionPK @NonNull Long id, CollectionChainDealStatusEnum dealStatus) {
//        LambdaUpdateWrapper<CollectionChainInitDetailsLog> wrapper = new LambdaUpdateWrapper<>();
//        wrapper.eq(CollectionChainInitDetailsLog::getId, id);
//        wrapper.set(CollectionChainInitDetailsLog::getDealStatus, dealStatus);
//        return update(wrapper);
//    }
//
//    @Override
//    @PartitionTable(TABLE)
//    public List<CollectionChainInitDetailsLog> metaChainInitListAndCollectionIdAndLimit(@PartitionField Long collectionId, UserChainLogStatusEnum status, CollectionChainDealStatusEnum dealStatus, int size) {
//        LambdaQueryWrapper<CollectionChainInitDetailsLog> wrapper = new LambdaQueryWrapper<>();
//        wrapper.eq(CollectionChainInitDetailsLog::getCollectionId, collectionId);
//        wrapper.eq(CollectionChainInitDetailsLog::getStatus, status);
//        wrapper.eq(CollectionChainInitDetailsLog::getDealStatus, dealStatus);
//        wrapper.last("limit " + size);
//        return list(wrapper);
//    }
//
//    @Override
//    @PartitionTable(TABLE)
//    public boolean updateDealStatusAndTransactionHashByCollectionIdAndNumbering(@PartitionField Long collectionId, String transactionHash, Integer tokenId) {
//        LambdaUpdateWrapper<CollectionChainInitDetailsLog> wrapper = new LambdaUpdateWrapper<>();
//        wrapper.eq(CollectionChainInitDetailsLog::getCollectionId, collectionId);
//        wrapper.eq(CollectionChainInitDetailsLog::getTokenId, tokenId);
//        wrapper.eq(CollectionChainInitDetailsLog::getStatus, UserChainLogStatusEnum.SUCCESS);
//        wrapper.eq(CollectionChainInitDetailsLog::getDealStatus, CollectionChainDealStatusEnum.TRADEDING);
//
//        wrapper.set(CollectionChainInitDetailsLog::getDealStatus, CollectionChainDealStatusEnum.TRADEABLE);
//        wrapper.set(CollectionChainInitDetailsLog::getTransactionHash, transactionHash);
//        wrapper.set(CollectionChainInitDetailsLog::getModifyTime, DateTime.now());
//        return update(wrapper);
//    }
//
//    @Override
//    @PartitionTable(TABLE)
//    public boolean updateDealStatusAndTransactionHashByCollectionIdAndNumbering(@PartitionField Long collectionId, String transactionHash, Integer tokenId, CollectionChainDealStatusEnum dealStatus) {
//        LambdaUpdateWrapper<CollectionChainInitDetailsLog> wrapper = new LambdaUpdateWrapper<>();
//        wrapper.eq(CollectionChainInitDetailsLog::getCollectionId, collectionId);
//        wrapper.eq(CollectionChainInitDetailsLog::getTokenId, tokenId);
//        wrapper.eq(CollectionChainInitDetailsLog::getStatus, UserChainLogStatusEnum.SUCCESS);
////        wrapper.eq(CollectionChainInitDetailsLog::getDealStatus, CollectionChainDealStatusEnum.TRADEDING);
//
//        wrapper.set(CollectionChainInitDetailsLog::getDealStatus, dealStatus);
//        wrapper.set(CollectionChainInitDetailsLog::getTransactionHash, transactionHash);
//        wrapper.set(CollectionChainInitDetailsLog::getModifyTime, DateTime.now());
//        return update(wrapper);
//    }
//
//    @Override
//    @PartitionTable(TABLE)
//    public CollectionChainInitDetailsLog getOneByCollectionIdAnTokenId(@PartitionField Long collectionId, Integer numbering) {
//        LambdaQueryWrapper<CollectionChainInitDetailsLog> wrapper = new LambdaQueryWrapper<>();
//        wrapper.eq(CollectionChainInitDetailsLog::getCollectionId, collectionId);
//        wrapper.eq(CollectionChainInitDetailsLog::getTokenId, numbering);
//        return getOne(wrapper);
//    }
//
//    @Override
//    @PartitionTable(TABLE)
//    public CollectionChainInitDetailsLog getOneByCollectionIdAnTokenIdAndStatsAndDealStatus(@PartitionField Long collectionId, Integer tokenId, UserChainLogStatusEnum status) {
//        LambdaQueryWrapper<CollectionChainInitDetailsLog> wrapper = new LambdaQueryWrapper<>();
//        wrapper.eq(CollectionChainInitDetailsLog::getCollectionId, collectionId);
//        wrapper.eq(CollectionChainInitDetailsLog::getTokenId, tokenId);
//        wrapper.eq(CollectionChainInitDetailsLog::getStatus, status);
//        wrapper.in(CollectionChainInitDetailsLog::getDealStatus, CollectionChainDealStatusEnum.TRADEABLE, CollectionChainDealStatusEnum.FROZEN);
//        return getOne(wrapper);
//    }
//
//    @Override
//    @PartitionTable(TABLE)
//    public Boolean getOneByCollectionIdsAnTokenIdAndStatsAndDealStatus(@PartitionField Long collectionId, List<Integer> tokenIds, UserChainLogStatusEnum status) {
//        LambdaQueryWrapper<CollectionChainInitDetailsLog> wrapper = new LambdaQueryWrapper<>();
//        wrapper.eq(CollectionChainInitDetailsLog::getCollectionId, collectionId);
//        wrapper.eq(CollectionChainInitDetailsLog::getStatus, status);
//        wrapper.in(CollectionChainInitDetailsLog::getTokenId, tokenIds);
//        wrapper.in(CollectionChainInitDetailsLog::getDealStatus, CollectionChainDealStatusEnum.TRADEABLE, CollectionChainDealStatusEnum.FROZEN);
//        return count(wrapper) == tokenIds.size();
//    }
//
//    @Override
//    @PartitionTable(TABLE)
//    public void updateDealStatusByCollectionIdAndTokenId(@PartitionField Long collectionId, Integer tokenId, CollectionChainDealStatusEnum dealStatus) {
//        LambdaUpdateWrapper<CollectionChainInitDetailsLog> wrapper = new LambdaUpdateWrapper<>();
//        wrapper.eq(CollectionChainInitDetailsLog::getCollectionId, collectionId);
//        wrapper.eq(CollectionChainInitDetailsLog::getTokenId, tokenId);
//        wrapper.set(CollectionChainInitDetailsLog::getDealStatus, dealStatus);
//        update(wrapper);
//    }
//
//    @Override
//    @PartitionTable(TABLE)
//    public CollectionChainInitDetailsLog getById(@PartitionPK Long id) {
//        return super.getById(id);
//    }
//
//    @Override
//    public boolean updateById(CollectionChainInitDetailsLog model) {
//        // 分区实现
//        return TablePartitionExecutor.exec(CollectionChainInitDetailsLogDao.getPartitionById(model.getId()), (partition) -> {
//            return super.updateById(model);
//        });
//    }
//}